package br.com.playonline.util.bolao;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public abstract class Jogo {

	public abstract List<String> gerarJogos(Integer qtdJogos,Integer qtdNumeros, Integer numerosCartela, List<Integer> desdobramento, List<Integer> sequenciaFixa);

	public List<Integer> gerar(List<Integer> desdobramento, Integer qtdNumeros, Integer fimIntervalo, List<Integer> sequenciaFixa){
		List<Integer> sequenciaTrabalhada = new ArrayList<Integer>();
		if(sequenciaFixa != null && sequenciaFixa.size() > 0){
			sequenciaTrabalhada = criarSequenciaTrabalhadaComNumerosFIXOS(sequenciaFixa);
		}
		Random random = new Random();
		Integer numeroGerado = 0;
		while( sequenciaTrabalhada.size() < qtdNumeros){
			numeroGerado = random.nextInt(fimIntervalo)+1;
			if(numeroGerado <= fimIntervalo && !sequenciaTrabalhada.contains(numeroGerado) && desdobramento.contains(numeroGerado) )
				sequenciaTrabalhada.add(numeroGerado);
		}
		return sequenciaTrabalhada;
	}
	
	public boolean jogosContemJogo(String jogo, List<String> jogos){
		for(String jogoAux : jogos){
			if(jogoAux.equals(jogo))
				return true;
		}
		return false;
	}
	
	public String transformarJogo(List<Integer> sequencia){
		String jogo = "";
		String newNumero;
		for(Integer numero : sequencia){
			newNumero = numero+"";
			if(newNumero.length() < 2){
				jogo += "0"+numero + "-";
			}else{
				jogo += numero + "-";
			}
		}
		return jogo.substring(0, jogo.length() - 1);
	}
	
	public List<Integer> addDesdobramentoSeNaoForPassadoNenhumDesdobramento(Integer qtdNumeros,List<Integer> desdobramento){
		if(desdobramento == null){
			desdobramento = new ArrayList<Integer>();
		}
		
		for(int valor = 1; valor <= qtdNumeros; valor++){
			desdobramento.add(valor);
		}
		return desdobramento;
	}
	
	public List<Integer> criarSequenciaTrabalhadaComNumerosFIXOS(List<Integer> sequenciaFixa){
		Collections.sort(sequenciaFixa);
		List<Integer> seqTrabalhada = new ArrayList<Integer>();
		for(Integer value : sequenciaFixa ){
			seqTrabalhada.add(value);
		}
		return seqTrabalhada;
	}
	
}

